package com.penghaisoft.microwms.materialhand.web.outwarehouse.service;

import java.util.List;

import com.penghaisoft.microwms.common.data.model.RawHandOut;
import com.penghaisoft.microwms.common.data.model.RawHandOutSn;
import com.penghaisoft.microwms.common.dto.RawBackDto;
import com.penghaisoft.microwms.common.dto.Resp;
import com.penghaisoft.microwms.common.dto.TransResult;
import com.penghaisoft.microwms.common.wms.model.RawStorageSn;

/**
 * 原材料出库iter
 */
public interface IMaterialHandOutWhService {

    /**
     * 退料
     * @return
     */
    public TransResult backMatScanBar(RawBackDto rawBackDto);

	/** 
	* @Title: queryHandworkOut 
	* @Description: 手工出库单号
	* @param @param rawHandOut
	* @param @return  参数说明 
	* @return List<RawHandOut>    返回类型
	* @author jzh 
	* @throws 
	*/
	public List<RawHandOut> queryHandworkOut(RawHandOut rawHandOut);

	/** 
	* @Title: updateHandworkOut 
	* @Description: 将手工出库单状态置为发货中
	* @param @param rawHandOut
	* @param @return  参数说明 
	* @return Resp    返回类型
	* @author jzh 
	* @throws 
	*/
	public Resp updateHandworkOut(RawHandOut rawHandOut);

	/** 
	* @Title: queryHandworkOutNot2 
	* @Description: 手工出库单号，状态！=2（不为发货完成） 
	* @param @param rawHandOut
	* @param @return  参数说明 
	* @return List<RawHandOut>    返回类型
	* @author jzh 
	* @throws 
	*/
	public List<RawHandOut> queryHandworkOutNot2(RawHandOut rawHandOut);

	/** 
	* @Title: queryRawStorageSn 
	* @Description: 根据条码查询，状态为可用 
	* @param @param rawStorageSn
	* @param @return  参数说明 
	* @return List<RawStorageSn>    返回类型
	* @author jzh 
	* @throws 
	*/
	public List<RawStorageSn> queryRawStorageSn(RawStorageSn rawStorageSn);


	/**
	 * @param rawStorageSnNew  
	* @Title: updateAndCreateHandOut 
	* @Description: 更改已分配数量为新数量 并且 新增记录，更改条码状态为已出库 （保证事物）
	* @param @param rawHandOut
	* @param @param rawHandOut2
	* @param @param barcode
	* @param @return  参数说明 
	* @return Resp    返回类型
	* @author jzh 
	* @throws 
	*/
	public Resp updateAndCreateHandOut(RawHandOut rawHandOutNew, RawHandOutSn rawHandOutSn, RawStorageSn rawStorageSnNew);

	/** 
	* @Title: handworkBack 
	* @Description: //将RawHandOutSn的scan_status置为退扫，将rawHandOut实发数量-数量，
	* 	//将rawStorageSn的BarcodeStatus置为0可用（保证事物）
	* @param @param rawHandOutSn
	* @param @param rawStorageSn
	* @param @return  参数说明 
	* @return Resp    返回类型
	* @author jzh 
	* @throws 
	*/
	public Resp handworkBack(RawHandOutSn rawHandOutSn, RawHandOut rawHandOut, RawStorageSn rawStorageSn);

	public Resp updateHandwork(RawHandOut rawHandOut);


}
